// Promise.all(PromisesArr)  
// Promise.all 可以将多个Promise实例包装成一个新的Promsie实例
// 成功：返回一个结果数组
// 失败：返回最先被reject失败状态的值
// Promise.all获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一致的
// 好处：在前端开发请求数据的过程中，偶尔会遇到发送多个请求并根据请求顺序获取和使用数据的场景，使用Promise.all毫无疑问可以解决这个问题

function myPromiseAll(promises) {
    if (!Array.isArray(promises)) {
        console.error('Arguments must be an array');
    };

    let count = 0;
    let num = promises.length;
    let res = [];

    return new Promise((resolve, reject) => {
        for (let i = 0; i < num; i++) {
            Promise.resolve(promises[i])   // 先转换为promise对象
            .then(value => {
                res[i] = value;
                count++;
                if (count === num) {
                    resolve(res);
                };
            }).catch(err => reject(err));
        };
    });
};

